package tech.aistar.corejava.day06.extend;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:为什么使用多态的语法
 * @date 2019/7/22 0022
 */
public class AnimalArrDemo {
    public static void main(String[] args) {
        //父类可以去接子类
        //Dod[] dogs = new Dog[1];
        //Dog dog = new Dog("xx",100.0);
        //dogs[0] = dog;

        //Cat[] cats = new Cat[1];
        //...cat对象
        //放入到cats数组中.

        //多态的应用
        //1. 对象的编译时可以写成父类,对象的运行时类型可以写成子类.

        Animal[] animals = new Animal[2];

        Animal dog = new Dog("xx",100.0);

        Animal cat = new Cat("mimi",100.0);
       //Dog dog = new Dog("xx",100.0);

        System.out.println(dog instanceof Animal);//true
        //System.out.println(dog instanceof Cat);//true

        animals[0] = dog;
        animals[1] = cat;

        System.out.println(cat instanceof Cat);
        System.out.println(dog instanceof Cat);

        //遍历数组...
        for(Animal animal:animals){
            //对象的编译时类型决定了对象的访问能力
            //对象的运行时类型决定了对象的行为能力
            animal.spark();

            //如果使用父类作为编译时类型
            //那么也许在某一个瞬间就想调用子类中的方法[父类中没有提供的]

            //一般进行强制类型转换的时候,需要进行类型的判断
            if(animal instanceof Cat) {
                Cat c = (Cat) animal;
                c.catchMouse();
            }
        }
    }
}
